package com.hlyj.http.base.tool.lib_hlyj_base.utils;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import java.io.File;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * Created by qp on 2024/8/26
 * @author qp
 * @description 风险控制开关
 */
public class RiskManagementUtil {
//   /**
//     * 检测风险控制开关
//     * @param context
//     * @return true:风险控制开启 false:风险控制关闭  todo
//     */
//    public static boolean isRiskControl(Context context){
//       if (isDeveloperMode(context) || !isSimCardInserted(context)){
//           return true;
//       }else {
//           return false;
//       }
//    }

   //检测开发者模式是否启用
    public static boolean isDeveloperMode(Context context){
        return android.provider.Settings.Secure.getInt(context.getApplicationContext().getContentResolver(),
                android.provider.Settings.Global.DEVELOPMENT_SETTINGS_ENABLED,0)==1;
    }
  //是否开启http抓包
    public static boolean isHttpCapture(Context context){
        return android.provider.Settings.Secure.getInt(context.getApplicationContext().getContentResolver(),
                android.provider.Settings.Global.HTTP_PROXY,0)==1;
    }
    //检查手机是否安装了sim卡
    public static String isSimCardInserted(Context context) {
        TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY ? "1" : "0";
    }


    /**
     * 是否开启了代理
     *
     * @return
     */
    public static String isWifiProxy() {
        String proxyAddress = System.getProperty("http.proxyHost");
        int proxyPort = 0;
        String portStr = System.getProperty("http.proxyPort");
        if (!TextUtils.isEmpty(portStr)) {
            proxyPort = Integer.parseInt(portStr);
        }
        //        Log.e("hjw", "地址:" + proxyAddress + " 端口：" + proxyPort);
        boolean wifiProxy = !TextUtils.isEmpty(proxyAddress) && proxyPort != 0;
        return wifiProxy ? "1" : "0";
    }

    /**
     * 是否激活vpn
     * @param context
     * @return
     */
    /**
     * 判断是否开启了 VPN
     * @param context 上下文对象
     * @return 0 表示未开启 VPN，1 表示开启了 VPN
     */
    public static String isVpnActive(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        if (connectivityManager != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // Android 6.0 及以上版本
                Network network = connectivityManager.getActiveNetwork();
                NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(network);
                return (capabilities != null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) ? "1" : "0";
            } else {
                // Android 6.0 以下版本
                NetworkInfo[] networkInfos = connectivityManager.getAllNetworkInfo();
                for (NetworkInfo networkInfo : networkInfos) {
                    if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_VPN) {
                        return networkInfo.isConnectedOrConnecting() ? "1" : "0";
                    }
                }
            }
        }
        return "0";
    }

    /**
     * 是否安装了vpn软件
     * @param context
     * @return true:未安装 false:已安装
     */
    public static boolean isVPNBlocked(Context context) {
        // 定义需要屏蔽的 VPN 和工具应用的包名列表
        Set<String> blockedPackages = new HashSet<>(Arrays.asList(
                "ch.protonvpn.android", // ProtonVPN
                "com.avira.vpn", // Avira Phantom VPN
                "com.birdvpn.app", // birdvpn
                "com.daxiang.vpn", // 大象VPN
                "com.dmvpn.vpnfree", // DMVPN
                "com.fastfun.vpn", // 光速VPN
                "com.expressvpn.vpn", // expressvpn
                "com.fishervpn.freevpn", // 飞鱼VPN
                "com.freevpnintouch", // vpnintouch
                "com.goldenfrog.vyprvpn.app", // Vypr VPN
                "com.ifast.virtualvpn", // ifast
                "com.nordvpn.android", // NordVPN
                "com.surfshark.vpnclient.android", // surfshark加速器
                "com.suxxt.vpnanonymity",
                "com.whitebunny.vpn",
                "com.windscribe.vpn", // Windscribe
                "com.wl.ufovpn", // UFO VPN
                "com.xy.vpn", // xy vpn
                "hotspotshield.android.vpn", // Hotspot Shield VPN
                "com.lishun.flyfish", // 飞飞加速器
                "top.a6b.shendunet", // 深度IP转换器
                "com.qi.earthnutproxy", // HuaShengproxy
                "com.qi.staticsproxy", // StatisProxy
                "com.zouqi.qingfeng", // 青峰加速器
                "com.fvcorp.android.aijiasuclient", // 爱加速
                "com.zaozhu.netplus", // 蓝鲸加速器
                "com.qlbd.quanliangpromote", // 全量加速器
                "com.mengdie.turtlenew", // 海龟加速器
                "cn.ccspeed", // CC加速器
                "com.xiongmao886.tun", // 熊猫加速器
                "com.zx.a2_quickfox", // quickfox加速器
                "com.sanye.xiongyingjiasuqi", // 小火箭加速器手游加速器
                "com.dongguo.feiyu", // 飞鱼环球
                "com.netease.uu", // UU加速器
                "com.njh.biubiu", // biubiu加速器
                // 厂商或媒体办公应用
                "com.yiqixie.kem", // KIM协同办公
                "com.mi.oa", // 小米OA
                "com.baidu.hi", // Baidu Hi办公APP
                "com.huawei.welink", // 华为云WeLink办公软件
                "com.huawei.works", // 华为协同办公平台
                "com.sie.mp", // vChat办公聊天
                "com.teamtalk.im", // teamtalk即时通讯
                "com.ss.android.lark.kami", // 小米办公APP
                "com.bytedance.ad.deliver", // 巨量引擎
                "com.baidu.fengchao.ui", // 百度推广
                // 开发/改机/辅助工具
                "de.roby.android.xposed.installer", // XPosed
                "org.autojs.autojs", // AutoJS
                "com.huawei.fastapp.dev", // 华为快应用调试器
                "org.hapjs.mockup", // 快应用加载器
                "org.hapjs.debugger", // 快应用调试器
                "com.vivo.hybrid.sdkdemo", // vivo快应用demo
                "com.vivo.hybrid.debugger", // vivo快应用调试器
                "com.cyjh.mobileanjian.vip", // 按键精灵
                "com.topjohnwu.magisk", // 刷机工具
                "com.guoshi.httpcanany", // 抓包工具
                "com.peopledaflychina.activity",
                "com.miui.thirdappassistant", // 小米三方应用异常分析app
                "com.coloros.videoeolitor",
                "com.huawei.deveco.assistant", // 华为应用调测助手
                "com.huawei.deveco.apptest.plndtest", // 华为智能检测
                "com.vivo.autotest.screen_record", // vivo自动化测试录屏
                "com.github.uiautomator", // 自动化测试
                "com.github.uiautomator.test", // 自动化测试
                "com.oppo.cloudtest.androidagent", // oppo云测
                "de.robv.android.xposed.installer", // XPosed
                "com.guoshi.httpcanary", // 抓包工具
                "com.huawei.deveco.apptest.plrdtest", // 华为应用测试工具
                "io.appium.unlock", // 自动化测试
                "com.my.idchanger", // 设备id更改器
                "app.greyshirts.sslcapture", // 抓包工具
                "com.android.uiautomator", // 自动化测试
                "io.appium" // 自动化测试
        ));

        // 获取 PackageManager
        PackageManager packageManager = context.getPackageManager();
        // 获取设备上已安装的应用列表
        List<PackageInfo> installedPackages = packageManager.getInstalledPackages(PackageManager.GET_META_DATA);
        // 检查是否有屏蔽的应用
        for (PackageInfo packageInfo : installedPackages) {
            String packageName = packageInfo.packageName;
            if (blockedPackages.contains(packageName)) {
                return false; // 发现屏蔽的应用，返回 false
            }
        }
        return true; // 未发现屏蔽的应用，返回 true
    }

    /**
     * 判断设备是否已 ROOT
     */
    public static String isRooted() {
        return (checkSuFile() || checkSuCommand() || checkBuildTags() || checkSystemProperties() || checkMagisk()) ? "1" : "0";
    }

    /**
     * 检查 su 文件是否存在
     */
    private static boolean checkSuFile() {
        String[] paths = {
                "/system/bin/su",
                "/system/xbin/su",
                "/sbin/su",
                "/system/su",
                "/system/bin/.ext/su",
                "/system/usr/we-need-root/su"
        };
        for (String path : paths) {
            if (new File(path).exists()) {
                return true;
            }
        }
        return false;
    }

    /**
     * 尝试执行 su 命令
     */
    private static boolean checkSuCommand() {
        try {
            Runtime.getRuntime().exec("su");
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 检查 Build.TAGS 是否包含 test-keys
     */
    private static boolean checkBuildTags() {
        return Build.TAGS != null && Build.TAGS.contains("test-keys");
    }

    /**
     * 检查系统属性
     */
    private static boolean checkSystemProperties() {
        String buildTags = System.getProperty("ro.build.tags", "");
        String buildType = System.getProperty("ro.build.type", "");
        return buildTags.contains("test-keys") || "userdebug".equals(buildType);
    }

    /**
     * 检查 Magisk 或其他 ROOT 管理工具
     */
    private static boolean checkMagisk() {
        String[] magiskPaths = {
                "/data/adb/magisk",
                "/sbin/.magisk",
                "/data/adb/ksu"
        };
        for (String path : magiskPaths) {
            if (new File(path).exists()) {
                return true;
            }
        }
        return false;
    }
}
